//
//  CZHomeViewController.swift
//  Weibo24
//
//  Created by apple on 16/2/24.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD

/*  Int
    max_id 在iPhone5上 是32位
*/
/*
    1.获取数据 -- 查看接口文档

    2.分析界面
    3.分析功能

*/

/*
    上拉更多的
    第一个问题: 什么时候去加载数据? 没有滑到最后一个的时候,就取让它请求
    第二个问题: 显示在哪里? -- 添加在FooterView/或者添加到最后一个cell上


*/

/*
    下拉刷新
    界面: 视图放置在哪里?
    功能: 什么时候出来,什么又回去? 网络数据加载完成之后出来,显示一会儿之后回去
*/

let CZHomeViewControllerReuserIdenfiter = "CZHomeViewControllerReuserIdenfiter"

class CZHomeViewController: CZBaseTableViewController {

    // 创建ViewModel的实例
    var statusListViewModel: CZStatusListViewModel?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        visitor?.setInfo("关注一些人，回这里看看有什么惊喜", image: "visitordiscover_feed_image_house", animation: true)
        // CZUserViewModel.shareInstance.isLogin!
        // 判断一下是否登陆
        if  isLogin{
        
            //一定要注意,必须是登录之后,才能发送网络请求
            /*
            
            */
            //赋值
            statusListViewModel = CZStatusListViewModel()
            // 为什么有问号? 系统提醒程序员,注意啦, 这个变量是可选项,有可能为nil,这个时候你得思考一下,有没有值
            loadData()
            
            //注册cell
            /*
            cellClass: AnyClass? -> UITableViewCell.self
            */
            //自定义cell需要改 注册Cell
            tableView.registerClass(CZHomeTableViewCell.self, forCellReuseIdentifier: CZHomeViewControllerReuserIdenfiter)
            
            // 给cell一个固定的宽高有 2中方式
            
            //1 自动计算行高
            tableView.rowHeight = UITableViewAutomaticDimension
            //2 估算行高 -- 在没有更新我们的约束之前,先预估一个行高
            //必须需要设置的数值,这个数值是一个估算的值
            //如果一个cell的高度在 66 -100之间,我们给他一个 中间值 85
            tableView.estimatedRowHeight = 85
            //3  第三个隐形的条件 -- 约束,一定要确保约束正确
            
            
            // 添加到tableView的footer上
            tableView.tableFooterView = pullView
            

            tableView.addSubview(refreshView)
            
            refreshView.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
           
            
            
        }
        
        
        
        
    }
    
    /*
        1. keyPath --> 属性
        2. object --> 被观察者
        3. change -> 改变的一个字典
        4.
    */
//    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
//        //把被观察对象转换成对应的类型 UITableView类型
//        let tableview = object as? UITableView
//        
//        print(tableview?.contentOffset)
//        
//    }

    func loadData(){
    
        SVProgressHUD.show()
        
        /*
            下拉更多,去改变 since_id , max_id = 0
        */
        
        // 上提更多,需要把 since_id = 0
        var since_id = statusListViewModel?.array.first?.statusModel?.id ?? 0
        
        //获取max_id
        
        var max_id = 0
        
//        max_id = statusListViewModel?.array.last?.statusModel?.id ?? 0
        
        //上拉更多
        if pullView.isAnimating() {
            
            //需要把 since_id = 0
            since_id = 0
            //拿到最后一条数据
            max_id = statusListViewModel?.array.last?.statusModel?.id ?? 0
            
            max_id -= 1
        
        }
        
        statusListViewModel?.loadData(since_id, max_id: max_id, finish: { (count :Int) -> () in
            
            self.tableView.reloadData()
            
            //菊花转的时候,肯定是上体更多
            if !self.pullView.isAnimating() {
                //显示刷新提示
                self.showNewCount(count)
            }
            
            // 还原加载标记
            self.pullView.stopAnimating()
            
            SVProgressHUD.dismiss()
            
            self.refreshView.endRefreshing()
//            self.refreshControl?.endRefreshing()
            
     
        })

        
    }
    
   /*
        1.数据显示的问题
        2.上体更多的时候,也有提示
    */
    //MARK:-- 显示刷新提示
    private func showNewCount(count: Int){
    
        //
        if count <= 0{
            return
        }
        
        //创建视图
        let showMessageLabel = UILabel(frame: CGRectMake(0,64 - 44,kUIScreenWidth,44))
        //设置属性
        showMessageLabel.backgroundColor = UIColor.orangeColor()
        
        if count > 0 {
        
            showMessageLabel.text = "更新了\(count)条数据"
        } else {
             showMessageLabel.text = "暂无更新"
        }
        
        showMessageLabel.textAlignment = .Center
        
        showMessageLabel.textColor = UIColor.blackColor()
        
        showMessageLabel.font = UIFont.systemFontOfSize(16)
       
        // 添加到视图里
       self.navigationController?.view.insertSubview(showMessageLabel, belowSubview: (navigationController?.navigationBar)!)
        
        // 需要一个动画
        UIView.animateWithDuration(2, animations: { () -> Void in
            showMessageLabel.transform = CGAffineTransformMakeTranslation(0, 44)
            }) { (_) -> Void in
                //当动画完成之后,隐藏
                UIView.animateWithDuration(2, animations: { () -> Void in
                    // 回去 -- 回到原点 CGAffineTransformIdentity
                    showMessageLabel.transform = CGAffineTransformIdentity
                    
                    }, completion: { (_) -> Void in
                        //销毁或者隐藏
                        showMessageLabel.removeFromSuperview()
                })
        }
        
    }
    
    //MARK:懒加载
    private lazy var pullView: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.Gray)
    
    private lazy var refreshView: CZRefreshView = CZRefreshView()
}

//MARK:--实现数据源方法
extension CZHomeViewController{

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return  statusListViewModel?.array.count ?? 0
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        
        let cell = tableView.dequeueReusableCellWithIdentifier(CZHomeViewControllerReuserIdenfiter, forIndexPath: indexPath) as! CZHomeTableViewCell
        
        let model = statusListViewModel?.array[indexPath.row]
        
        cell.statusViewModel = model
        
        // 在创建cell的时候,我们判断一下,indexPath.row
        // 当数据已经请求的时候,就不要让它再请求.
        if indexPath.row == (statusListViewModel!.array.count - 1) && !pullView.isAnimating(){
            // 请求数据
            // 先转,再加载数据
             pullView.startAnimating()
            
            loadData()
            
        }
        
        return cell
    }
    
}
